package cn.quang.utils.lang;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintWriter;

public class SystemUtils {

    /**
     * 获取CPU核数
     */
    public static int getSystemCpuCount() {
        return Runtime.getRuntime().availableProcessors();
    }

    /**
     * 获取推荐线程数
     * 推荐线程数=CPU核数
     */
    public static int getSystemThreadCount() {
        return getSystemCpuCount();
    }

    /**
     * 以字符串的形式输出异常堆栈信息
     * @param e - 异常对象
     */
    public static String getStackTrace(Throwable e) {
        if (e == null) {
            return "";
        }

        ByteArrayOutputStream buf = null;
        String strException;

        try {
            buf = new ByteArrayOutputStream();
            e.printStackTrace(new PrintWriter(buf, true));
            strException = buf.toString();
        } finally {
            try {
                if (buf != null)  buf.close();
            } catch (Exception ignored) {
                // ignored
            }
        }

        return strException;
    }

    /**
     * 获取系统为用户指定的工作目录
     */
    public static String getUserDir() {
        File file = new File(System.getProperty("user.dir"));
        return file.getAbsolutePath().replace('\\', '/');
    }

    /**
     * 获取系统临时文件目录
     */
    public static String getTempDir() {
        File file = new File(System.getProperty("java.io.tmpdir"));
        return file.getAbsolutePath().replace('\\', '/');
    }
}
